package model;

import java.util.Collections;
import java.util.List;
import java.util.ArrayList;
import java.util.Date;

/**
 * 
 * @author morellatoariel
 * Observacion: Algoritmo de asignacion de revisores a trabajos. Por cada trabajo se asignan tres revisores sucesivos y si
 * se termina la lista de revisores comienza nuevamente.
 */

public final class Algoritmo_porFechaDeIngreso extends AlgoritmoDeAsignacion{

	public ArrayList<Usuario> ejecutate(CFP cfp, SistemaWeb sistema) {

		// lista de usuarios
		List<Usuario> listaDeRevisores= cfp.getListaDeRevisores();
		Collections.sort(listaDeRevisores);
		
		// lista de trabajos
		List<Trabajo> listaDeTrabajos;
		listaDeTrabajos= cfp.getTrabajos();
		
		Usuario revisorActual= listaDeRevisores.get(0);
		for(Trabajo tp : listaDeTrabajos){
			Usuario revisor1= revisorActual;
			sistema.enviarMail(revisor1,tp);
			
			Usuario revisor2= this.siguiente(listaDeRevisores, revisor1);
			sistema.enviarMail(revisor2,tp);
			
			Usuario revisor3= this.siguiente(listaDeRevisores, revisor2);
			sistema.enviarMail(revisor3,tp);
			
			tp.asignarRevisores(revisor1, revisor2, revisor3);
			revisorActual= this.siguiente(listaDeRevisores,revisor3);
		}
		return (ArrayList<Usuario>) listaDeRevisores;
	}
	
	private Usuario siguiente(List<Usuario>revisores, Usuario usuario ){
		int indiceActual= revisores.indexOf(usuario);
		if(indiceActual == revisores.size()){
			return revisores.get(0);
		}
		else{
			return revisores.get(indiceActual + 1);
		}
	}

}
